import { Dialog, Notify } from 'quasar'

// const loginDialog: Promise<void> | null = null
export default defineNuxtPlugin(() => {
  // const appConfig = useAppConfig();
  // console.log(appConfig);

  // const runtimeconfig = useRuntimeConfig();
  // console.log(runtimeconfig);

  const iFetch = $fetch.create({
    baseURL: import.meta.dev ? '/proxy' : useRuntimeConfig().public.apiBase,
    headers: {
      'Content-Type': 'application/json',
    },
    retry: 3,
    retryDelay: 1000,
    timeout: 10000,
    responseType: 'json',
    onRequest({ request, options, response, error }) {
      // console.log('🚀 ~ onRequest ~ error:', error)

      // console.log('🚀 ~ onRequest ~ request:', request)
      // console.log('🚀 ~ onRequest ~ options:', options)
      options.headers = new Headers(options.headers || {})
      // options.headers.set('Authorization', useTokenStore().accessToken)
      // if (options.headers instanceof Headers) {
      // }
      // else if (Array.isArray(options.headers)) {
      //   options.headers.push(['Authorization', useTokenStore().accessToken])
      // }
      // else {
      //   options.headers.Authorization = useTokenStore().accessToken
      // }
      // if (options.query?.pageNum === 2) {
      //   // options.headers.Authorization = ''
      //   options.headers.set('Authorization', '')
      // }
    },
    async onResponse({ response }) {
      // console.log('🚀 ~ onResponse ~ context:', context);
      // const { response } = context;
      // setTimeout(console.log, 3000, context);

      // if (isString(response._data)) {
      //   try {
      //     response._data = JSON.parse(response._data);
      //   } catch (error) {}
      // }
      // console.log('🚀 ~ onResponse ~ response:', response)
      if (response._data?.code === 200) return

      const error = new Error(response._data?.msg ?? '未知错误')

      // if (response._data?.code === 401) {
      //   loginDialog = loginDialog ?? new Promise<void>((resolve, reject) => {
      //     Dialog.create({
      //       title: response._data?.msg ?? '认证失败',
      //       message: '是否重新登录?',
      //       ok: '去登录',
      //       cancel: '取消',
      //     }).onOk(() => {
      //       useTokenStore().clear()
      //       void navigateTo({ path: '/login', query: { redirect: useRoute().path } }, { replace: true })
      //       resolve()
      //     }).onCancel(() => {
      //       resolve()
      //     }).onDismiss(() => {
      //       loginDialog = null
      //     })
      //   })
      //   await loginDialog
      // }
      // if (response._data?.code !== 200) {
      // const error = createError({
      //   message: response._data?.msg,
      // });

      // context.error = error;
      // console.dir(error);
      throw error
      // }
    },
    // onRequestError(context) {
    //   console.log('🚀 ~ onRequestError ~ context:', context);
    //   // console.dir(context);
    // },
    // onResponseError(context) {
    //   console.log('🚀 ~ onResponseError ~ context:', context);
    // },
  })
  // console.log('🚀 ~ defineNuxtPlugin ~ apiFetch:', apiFetch);
  return {
    provide: {
      iFetch,
    },
  }
})
